/**
 * 概念：相同的输入，返回相同的结果
 */

/**
 * 数组中的纯函数如: slice,不管怎么调用slice,返回的值都是一样的,splice就不是纯函数，
 */
var arr= [1,2,3,4,5,6]

// slice 纯函数 ，
// console.log(arr.slice(0,3)); // [ 1, 2, 3 ]
// console.log(arr.slice(0,3)); // [ 1, 2, 3 ]
// console.log(arr.slice(0,3)); // [ 1, 2, 3 ]

// splice 不是纯函数
// console.log(arr.splice(0,3)); // [ 1, 2, 3 ]
// console.log(arr.splice(0,3));// [ 4, 5, 6 ]
// console.log(arr.splice(0,3)); // []

/**
 * memorize 缓存
 * 纯函数可以根据输入来缓存结果
 */
function getSum(a,b){
	console.log(a,b)
	return a+b
}
function memorize(fn){
	let cache = {}
	return function(){
		let key = JSON.stringify(arguments)
		
		return cache[key] || (cache[key]=fn.apply(fn,arguments))
	}
}

memorize(getSum(1,2))

memorize(getSum(1,2))

memorize(getSum(1,2))
memorize(getSum(1,2))